package dao;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import model.Formatacoes;
import entity.Fornecedor;

public class FornecedorDao extends GenericDao {

	// public String formatarDataAtual() {
	// Date data = new Date(System.currentTimeMillis());
	// SimpleDateFormat formatarDate = new SimpleDateFormat("dd-MM-yyyy");
	// String dataAtual = formatarDate.format(data);
	// String dataA = dataAtual.replace('/', '-');
	// String dataInv = "";
	// dataInv = "" + dataA.substring(6, 10) + dataA.substring(2, 6)
	// + dataA.substring(0, 2);
	// return dataInv;
	// }
	//
	// public String formatarDataString(String data) {
	// String dataA = data.replace('-', '/');
	// String dataInv = "";
	// dataInv = dataA.substring(8, 10) + "/" + dataA.substring(5, 7) + "/"
	// + dataA.substring(0, 4);
	// return dataInv;
	// }

	// public String formatarDataInv(String data) {
	// if (data.contains("-")) {
	// String dataA = data.replace('-', '/');
	// String dataInv = "";
	// dataInv = dataA.substring(8, 10) + "/" + dataA.substring(5, 7)
	// + "/" + dataA.substring(0, 4);
	// System.out.println("????????????????????" + dataInv);
	// return dataInv;
	// }
	// return null;
	// }

	public void salvar(Fornecedor fornecedor) {
		try {
			String insert = "INSERT INTO CLIENTE(data_cadastro, data_ultimo_alteracao, descricao, CNPJ, telefone) VALUES(?,?,?,?,?)";
			save(insert, Formatacoes.formatarDataAtual(),
					Formatacoes.formatarDataAtual(), fornecedor.getDescricao(),
					fornecedor.getCnpj(), fornecedor.getTelefone());
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public void alterar(Fornecedor fornecedor) {
		try {
			String update = "UPDATE CLIENTE "
					+ "SET data_ultima_alteracao = ?, "
					+ "descricao = ?, CNPJ = ?, telefone = ?"
					+ "WHERE cod_fornecedor = ?";
			update(update, fornecedor.getId(),
					fornecedor.getDataUltimaAlteracao(),
					fornecedor.getDescricao(), fornecedor.getCnpj(),
					fornecedor.getTelefone());
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public void excluir(Object id) {
		try {
			String delete = "DELETE FROM FORNECEDOR WHERE cod_fornecedor = ?";
			delete(delete, id);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public List<Fornecedor> findClientes() throws SQLException {
		List<Fornecedor> fornecedores = new ArrayList<Fornecedor>();

		String select = "SELECT * FROM FORNECEDOR";

		PreparedStatement stmt = getConnection().prepareStatement(select);

		ResultSet rs = stmt.executeQuery();

		while (rs.next()) {
			Fornecedor fornecedor = new Fornecedor();
			fornecedor.setId(rs.getInt("cod_fornecedor"));
			fornecedor.setDataCadastro(Formatacoes.formatarDataString(rs
					.getString("data_cadastro")));
			fornecedor.setDataUltimaAlteracao(Formatacoes.formatarDataString(rs
					.getString("data_ultima_alteracao")));
			fornecedor.setDescricao(rs.getString("descricao"));
			fornecedor.setCnpj(rs.getString("cnpj"));
			fornecedor.setTelefone(rs.getString("telefone"));
			fornecedores.add(fornecedor);
		}

		rs.close();
		stmt.close();

		return fornecedores;
	}

	public long lastId() {
		try {
			String sql = "SELECT MAX(cod_fornecedor) AS cod_fornecedor FROM FORNECEDOR";
			PreparedStatement stmt = getConnection().prepareStatement(sql);
			ResultSet rs = stmt.executeQuery();
			rs.next();
			long id = rs.getLong("cod_fornecedor") + 1;
			return id;
		} catch (Exception e) {
			e.printStackTrace();
		}
		return 0;
	}

	// public Cliente findByName(String nome) throws SQLException {
	// String select = "SELECT * FROM CLIENTE WHERE nome = ?";
	// Cliente cliente = null;
	// PreparedStatement stmt = getConnection().prepareStatement(select);
	//
	// stmt.setString(1, nome);
	// ResultSet rs = stmt.executeQuery();
	//
	// while (rs.next()) {
	// cliente = new Cliente();
	// cliente.setId(rs.getLong("cod_cliente"));
	// cliente.setNome(rs.getString("nome"));
	// cliente.setDataCadastro(rs.getString("data_cadastro"));
	// cliente.setDataNascimento(rs.getString("data_nasc"));
	// cliente.setCpf(rs.getString("cpf"));
	// cliente.setRg(rs.getString("rg"));
	// cliente.setEndereco(rs.getString("endereco"));
	// cliente.setBairro(rs.getString("bairro"));
	// cliente.setCidade(rs.getString("cidade"));
	// cliente.setCep(rs.getString("cep"));
	// cliente.setTelefone(rs.getString("telefone"));
	// cliente.setCelular(rs.getString("celular"));
	// cliente.setSexo(rs.getString("sexo"));
	// cliente.setNaturalidade(rs.getString("naturalidade"));
	// cliente.setEstadoCivil(rs.getString("est_civil"));
	// cliente.setEstado(rs.getString("estado"));
	// }
	//
	// rs.close();
	// stmt.close();
	// return cliente;
	// }

	public Fornecedor findById(int id) throws SQLException {
		String select = "SELECT * FROM FORNECEDOR WHERE cod_fornecedor = ?";
		Fornecedor fornecedor = null;
		PreparedStatement stmt = getConnection().prepareStatement(select);

		stmt.setInt(1, id);
		ResultSet rs = stmt.executeQuery();

		while (rs.next()) {
			fornecedor = new Fornecedor();
			fornecedor.setId(rs.getInt("cod_fornecedor"));
			fornecedor.setDataCadastro(rs.getString("data_cadastro"));
			fornecedor.setDataUltimaAlteracao(rs
					.getString("data_ultima_alteracao"));
			fornecedor.setDescricao(rs.getString("descricao"));
			fornecedor.setCnpj(rs.getString("cnpj"));
			fornecedor.setTelefone(rs.getString("telefone"));
		}

		rs.close();
		stmt.close();
		return fornecedor;
	}

	public Fornecedor findByCpf(String cpf) {
		try {
			String select = "SELECT * FROM FORNECEDOR WHERE cpf = ?";
			Fornecedor fornecedor = null;
			PreparedStatement stmt = getConnection().prepareStatement(select);

			stmt.setString(1, cpf);
			ResultSet rs = stmt.executeQuery();

			while (rs.next()) {
				fornecedor = new Fornecedor();
				fornecedor.setId(rs.getInt("cod_fornecedor"));
				fornecedor.setDataCadastro(rs.getString("data_cadastro"));
				fornecedor.setDataUltimaAlteracao(rs
						.getString("data_ultima_alteracao"));
				fornecedor.setDescricao(rs.getString("descricao"));
				fornecedor.setCnpj(rs.getString("cnpj"));
				fornecedor.setTelefone(rs.getString("telefone"));
			}

			rs.close();
			stmt.close();
			return fornecedor;
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}

}
